package server

//import (
//	"crypto/tls"
//	"embed"
//	"fmt"
//	"os"
//)

//
//import (
//	"crypto/tls"
//	"embed"
//	"fmt"
//	"io/ioutil"
//	"ngrok/server/assets"
//	"os"
//)
//
//func LoadTLSConfig(crtPath string, keyPath string) (tlsConfig *tls.Config, err error) {
//	fileOrAsset := func(path string, default_path string) ([]byte, error) {
//		loadFn := ioutil.ReadFile
//		if path == "" {
//			loadFn = assets.Asset
//			path = default_path
//		}
//
//		return loadFn(path)
//	}
//
//	var (
//		crt  []byte
//		key  []byte
//		cert tls.Certificate
//	)
//
//	if crt, err = fileOrAsset(crtPath, "assets/server/tls/snakeoil.crt"); err != nil {
//		return
//	}
//
//	if key, err = fileOrAsset(keyPath, "assets/server/tls/snakeoil.key"); err != nil {
//		return
//	}
//
//	if cert, err = tls.X509KeyPair(crt, key); err != nil {
//		return
//	}
//
//	tlsConfig = &tls.Config{
//		Certificates: []tls.Certificate{cert},
//	}
//
//	return
//}

//package server

import (
	"crypto/tls"
	"embed"
	"fmt"
	"os"
)

// 使用 Go 1.16+ 的 embed 特性替代第三方资源库
//
//go:embed tls/*.crt tls/*.key
var tlsAssets embed.FS

func LoadTLSConfig(crtPath, keyPath string) (*tls.Config, error) {
	// 统一资源加载函数
	loadResource := func(path string, defaultPath string) ([]byte, error) {
		if path != "" {
			// 优先使用外部文件
			if data, err := os.ReadFile(path); err == nil {
				return data, nil
			}
		}

		// 回退到嵌入资源
		return tlsAssets.ReadFile(defaultPath)
	}

	crtData, err := loadResource(crtPath, "tls/snakeoil.crt")
	if err != nil {
		return nil, fmt.Errorf("failed to load certificate: %w", err)
	}

	keyData, err := loadResource(keyPath, "tls/snakeoil.key")
	if err != nil {
		return nil, fmt.Errorf("failed to load private key: %w", err)
	}

	cert, err := tls.X509KeyPair(crtData, keyData)
	if err != nil {
		return nil, fmt.Errorf("failed to parse key pair: %w", err)
	}

	return &tls.Config{
		Certificates: []tls.Certificate{cert},
		MinVersion:   tls.VersionTLS12, // 强制最低 TLS 1.2
		CipherSuites: []uint16{
			tls.TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
			tls.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
			tls.TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,
			tls.TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,
		}, // 现代加密套件
		CurvePreferences: []tls.CurveID{
			tls.X25519,
			tls.CurveP256,
		}, // 现代椭圆曲线
	}, nil
}
